#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#include <unistd.h>
 #include <stdio.h>

#if 1
class CSingleton
{ 
    // 其它成员  
public:  
    static CSingleton* GetInstance()
    {
        if ( m_pInstance == NULL ) //判断是否第一次调用
            m_pInstance = new CSingleton();
            return m_pInstance;
    }

    int test01();
private:  
    CSingleton(){ printf("0003\n"); };
    ~CSingleton(){ printf("0004\n"); };  
    static CSingleton * m_pInstance;  
    class CGarbo // 它的唯一工作就是在析构函数中删除CSingleton的实例  
    { 
    public: 
        ~CGarbo() 
        {  
            if (CSingleton::m_pInstance) 
                delete CSingleton::m_pInstance; 
            printf("0002\n");
        } 
    }; 
    static CGarbo Garbo; // 声明一个静态成员，在程序结束时，系统会调用它的析构函数，注意这里仅仅是声明，还需要在相应的cpp文件中对静态成员进行定义哦。 
};





//CSingleton* CSingleton::m_pInstance = NULL;
CSingleton* CSingleton::m_pInstance = CSingleton::GetInstance();
CSingleton::CGarbo CSingleton::Garbo;   //这个很重要

#endif

#if 0
class CSingleton
{ 
    // 其它成员  
public:  
    static CSingleton* GetInstance()
    {
        static CSingleton inst;
        return &inst;
    }

    int test01();
private:  
    CSingleton(){ printf("0003\n"); };
    ~CSingleton(){ printf("0004\n"); };

             CSingleton( const CSingleton& ){};
            //CSingleton& operate = ( const CSingleton& ){};



};
#endif


int CSingleton::test01()
{
    printf("001\n");
}


int main()
{

    CSingleton::GetInstance()->test01();

}